package org.rency.common.memcache.service;

import java.net.InetSocketAddress;
import java.util.List;
import java.util.Map;

import org.rency.common.memcache.bean.MemcacheNode;
import org.rency.common.memcache.support.annotation.MCacheDomain;

public interface MemcachedService {
	
	/**
	 * 添加缓存数据(如果Key已存在则会失败)
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public boolean addData(MCacheDomain domain);
	
	/**
	 * 添加缓存数据(如果Key已存在则会失败),无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 * @return
	 */
	public void addDataWithNoReply(MCacheDomain domain);
	
	/**
	 * 添加缓存数据(如果Key已存在,则替换原数据)
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public boolean setData(MCacheDomain domain);

	/**
	 * 添加缓存数据(如果Key已存在,则替换原数据),无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public void setDataWithNoReply(MCacheDomain domain);
	
	/**
	 * 获取缓存数据
	 * </br>Created on 2016年1月22日
	 * @param domain
	 * @return
	 */
	public Object getData(MCacheDomain domain);
	
	/**
	 * 更新缓存数据
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public boolean updateData(MCacheDomain domain);
	
	/**
	 * 更新缓存数据,无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public void updateDataWithNoReply(MCacheDomain domain);
	
	/**
	 * 删除缓存数据
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public boolean deleteData(MCacheDomain domain);
	
	/**
	 * 删除缓存数据,无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public void deleteDataWithNoReply(MCacheDomain domain);
	
	/**
	 * 更新缓存失效时间
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public boolean updateExpire(MCacheDomain domain);
	
	/**
	 * 更新缓存失效时间,无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public void updateExpireWithNoReply(MCacheDomain domain);
	
	/**
	 * 替换原数据(原数据不存在则失败)
	 * </br>Created on 2016年1月22日
	 * @param domain
	 * @return
	 */
	public boolean replaceData(MCacheDomain domain);
	
	/**
	 * 替换原数据(原数据不存在则失败),无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 */
	public void replaceDataWithNoReply(MCacheDomain domain);
	
	/**
	 * 在原数据后追加数据
	 * </br>Created on 2016年1月22日
	 * @param domain
	 * @return
	 */
	public boolean appendData(MCacheDomain domain);
	
	/**
	 * 在原数据后追加数据,无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 * @return
	 */
	public void appendDataWithNoReply(MCacheDomain domain);
	
	/**
	 * 在原数据前插入数据
	 * </br>Created on 2016年1月22日
	 * @param domain
	 * @return
	 */
	public boolean prependData(MCacheDomain domain);
	
	/**
	 * 在原数据前插入数据,无需等待服务器响应
	 * </br>Created on 2016年1月22日
	 * @param domain
	 * @return
	 */
	public void prependDataWithNoReply(MCacheDomain domain);

	/**
	 * 动态添加服务器节点
	 * </br>Created on 2016年1月22日
	 * @param node
	 * @throws Exception
	 */
	public void addNode(MemcacheNode node) throws Exception;
	
	/**
	 * 动态删除服务器节点
	 * </br>Created on 2016年1月22日
	 * @param node
	 * @throws Exception
	 */
	public void removeNode(MemcacheNode node) throws Exception;
	
	/**
	 * 获取服务器统计信息
	 * </br>Created on 2016年1月22日
	 * @return
	 * @throws Exception
	 */
	public Map<InetSocketAddress, Map<String, String>> getStatistics() throws Exception;
	
	/**
	 * 获取服务器统计信息
	 * </br>Created on 2016年1月22日
	 * @param item 统计项
	 * @return
	 * @throws Exception
	 */
	public Map<InetSocketAddress, Map<String, String>> getStatisticsByItem(String item) throws Exception;
	
	/**
	 * 查看可用节点
	 * </br>Created on 2016年1月22日
	 * @return
	 */
	public List<MemcacheNode> getAvailableServers();
	
}
